CXX=g++
AR=ar
SRC=src
OBJ=obj
EXE=bin
INC=inc
CPPFLAGS=-c -Wall -g -O0 -I$(INC) -Isrc -Iinclude
ARFLAG=rv
TEST=test

#Gtest related stuff
GTEST_DIR = ../gtest-1.7.0
GTESTFLAG=-I$(GTEST_DIR)/include 
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
				$(GTEST_DIR)/include/gtest/internal/*.h

#GTEST_SRCS_ = $(GTEST_DIR)/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
GTEST_SRCS_ = $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)

OBJFILES=$(OBJ)/hashtable.o

all: hashtableTest.exe \
     testHashTable.exe \
	 install

# Build the gtest library and main function library
$(OBJ)/gtest-all.o : $(GTEST_SRCS_)
	$(CXX) $(GTESTFLAG) $(CPPFLAGS) -I$(GTEST_DIR) -c $(GTEST_DIR)/src/gtest-all.cc -o $@

$(OBJ)/gtest_main.o : $(GTEST_SRCS_)
	$(CXX) $(GTESTFLAG) $(CPPFLAGS) -I$(GTEST_DIR) -c $(GTEST_DIR)/src/gtest_main.cc -o $@

$(OBJ)/gtest.a : $(OBJ)/gtest-all.o
	$(AR) $(ARFLAG) -o $@ $^

$(OBJ)/gtest_main.a : $(OBJ)/gtest-all.o $(OBJ)/gtest_main.o
	$(AR) $(ARFLAG) -o $@ $^

#Build other general tests
$(OBJ)/%.o : $(SRC)/%.cpp
	$(CXX) $(CPPFLAGS) -o $@ $<

$(OBJ)/%.o : $(TEST)/%.cpp
	$(CXX) $(GTESTFLAG) $(CPPFLAGS) -o $@ $<

hashtableTest.exe : $(OBJ)/hashtableTest.o $(OBJ)/gtest_main.o $(OBJ)/gtest.a $(OBJ)/gtest_main.a
	$(CXX) -pthread -o $@ $^

testHashTable.exe : $(OBJ)/testHashTable.o
	$(CXX) -o $@ $^

install:
	mv *.exe $(EXE)

clean:
	rm $(OBJ)/*.o $(OBJ)/*.a $(EXE)/*.exe
